<?php

namespace Agp\CoreBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use APY\DataGridBundle\Grid\Mapping as GRID;

/**
 * Agp\CoreBundle\Entity\EventoProduto
 *
 * @ORM\Table(name="evento_produto")
 * @ORM\Entity(repositoryClass="Agp\CoreBundle\Repository\EventoProdutoRepository")
 * @ORM\HasLifecycleCallbacks
 * 
 * @GRID\Source(columns="codEventoProduto, evento.info.descricao, produto.nome, limiteVendas, dtTroca, vlrProduto")
 */
class EventoProduto
{
    /**
     * @var integer $codEventoProduto
     *
     * @ORM\Column(name="cod_evento_produto", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     * 
     * @GRID\Column(title="Código", visible=false, type="text", size="5", primary=true)
     * 
     */
    protected $codEventoProduto;
    
    /** 
     * @ORM\ManyToOne(targetEntity="Produto", inversedBy="produtoReferenceEvento")
     * @ORM\JoinColumn(name="cod_produto", referencedColumnName="cod_produto", onDelete="Cascade")
     * @Assert\NotBlank
     * 
     * @GRID\Column(field="produto.nome", title="Produto", type="text", size="400")
     * @GRID\Column(field="produto.qtdeAtual", title="Quantidade", type="text", align="center")
     * 
     */
    protected $produto;

    /** 
     * @ORM\ManyToOne(targetEntity="ListaPreco", inversedBy="listaPrecoReference")
     * @ORM\JoinColumn(name="cod_lista_preco", referencedColumnName="cod_lista_preco", onDelete="Cascade")
     * 
     */
    protected $listaPreco;
    
    /** 
     * @ORM\ManyToOne(targetEntity="Evento")
     * @ORM\JoinColumn(name="cod_evento", referencedColumnName="cod_evento", onDelete="Cascade")
     * 
     * @GRID\Column(field="evento.info.descricao", title="Evento", type="text", size="400")
     * 
     */
    protected $evento;
    
    /**
     * @var object $empresa
     *
     * @ORM\ManyToOne(targetEntity="Empresa", fetch="LAZY")
     * @ORM\JoinColumn(name="cod_empresa", referencedColumnName="cod_empresa")
     */
    protected $empresa;
  
    /**
     * @var float $vlrProduto
     *
     * @ORM\Column(name="vlr_produto", type="float", nullable=false)
     * @Assert\NotBlank
     * 
     * @GRID\Column(title="Valor", type="number", style="currency")
     */
    protected $vlrProduto;

    /**
     * @var integer $limiteVendas
     *
     * @ORM\Column(name="limite_vendas", type="integer", nullable=true)
     * 
     * @GRID\Column(title="Limite (Qtde)", type="text", align="center")
     */
    protected $limiteVendas;
    
    /**
     *
     * @ORM\Column(type="datetime", name="dt_troca", nullable=true)
     * 
     * @GRID\Column(title="Limite (data)", type="datetime", align="center")
     */
    protected $dtTroca;

    public function __construct() {
        $this->usado = false;
    }
    
    /**
     * @ORM\PrePersist @ORM\PreUpdate
     */
    public function setZero(){
        if ($this->limiteVendas == null){
            $this->setLimiteVendas(0);
        }
        
    }
    
    public function getVlrProdutoTotal() {
        return $this->vlrProduto+$this->getTaxaVendaOnline ();
    }
    
    public function getTaxaVendaOnline(){
        $taxaVendaOnline = $this->evento->getEventoConfig()->getTaxaVendaOnline();
        
        if ($taxaVendaOnline == 0)
            return 0;
        else
            return $this->vlrProduto*($taxaVendaOnline/100);
        
    }
    
    /**
     * Set empresa
     *
     * @param integer $empresa
     * @return Produto
     */
    public function setEmpresa(Empresa $empresa)
    {
        $this->empresa = $empresa;
    
        return $this;
    }

    /**
     * Get empresa
     *
     * @return integer 
     */
    public function getEmpresa()
    {
        return $this->empresa;
    }
    
    /* hack for Acls */
    public function getId(){
        return 'class';
    }

        /**
     * Get codEventoProduto
     *
     * @return integer 
     */
    public function getCodEventoProduto()
    {
        return $this->codEventoProduto;
    }
    
    /**
     * Set codEventoProduto
     * 
     */
    public function setCodEventoProduto($id)
    {
        $this->codEventoProduto = $id;
    }

    /**
     * Set produto
     *
     * @param integer $produto
     * @return EventoProduto
     */
    public function setProduto($produto)
    {
        $this->produto = $produto;
    
        return $this;
    }

    /**
     * Get produto
     *
     * @return integer 
     */
    public function getProduto()
    {
        return $this->produto;
    }

    /**
     * Set listaPreco
     *
     * @param integer $listaPreco
     * @return listaPreco
     */
    public function setListaPreco($listaPreco)
    {
        $this->listaPreco = $listaPreco;
    
        return $this;
    }

    /**
     * Get listaPreco
     *
     * @return integer 
     */
    public function getListaPreco()
    {
        return $this->listaPreco;
    }

    /**
     * Set vlrProduto
     *
     * @param float $vlrProduto
     * @return EventoProduto
     */
    public function setVlrProduto($vlrProduto)
    {
        if (is_string($vlrProduto)){
            $this->vlrProduto = substr(str_replace(",", ".", $vlrProduto),3);
        }else{
            $this->vlrProduto = $vlrProduto;
        }
    
        return $this;
    }

    /**
     * Get vlrProduto
     *
     * @return float 
     */
    public function getVlrProduto()
    {
        return $this->vlrProduto;
    }

    /**
     * Set limiteVendas
     *
     * @param integer $limiteVendas
     * @return EventoProduto
     */
    public function setLimiteVendas($limiteVendas)
    {
        $this->limiteVendas = $limiteVendas;
    
        return $this;
    }

    /**
     * Get limiteVendas
     *
     * @return integer 
     */
    public function getLimiteVendas()
    {
        return $this->limiteVendas;
    }
    
    public function getEvento() {
        return $this->evento;
    }

    public function setEvento($evento) {
        $this->evento = $evento;
    }
    
    public function getDtTroca() {
        return $this->dtTroca;
    }

    public function setDtTroca($dtTroca) {
        $this->dtTroca = $dtTroca;
    }

}